export default class UserInfo {

  /** 登陆认证信息 */
  get token(): string {
    return this.get('login-token');
  }

  /** 登陆认证信息 */
  set token(val: string) {
    this.set('login-token', val);
  }

  /** 登陆用户名称 */
  get name(): string {
    return this.get('login-info-name');
  }

  /** 登陆用户名称 */
  set name(val: string) {
    this.set('login-info-name', val);
  }

  /** 登陆用户角色 */
  get role(): string {
    return this.get('login-info-role');
  }

  /** 登陆用户角色 */
  set role(val: string) {
    this.set('login-info-role', val);
  }

  /** 登陆用户头像 */
  get icon(): string {
    return this.get('login-info-icon');
  }

  /** 登陆用户头像 */
  set icon(val: string) {
    this.set('login-info-icon', val);
  }

  /** 登陆用户账号 */
  get account(): string {
    return this.get('login-info-account');
  }

  /** 登陆用户账号 */
  set account(val: string) {
    this.set('login-info-account', val);
  }

  /** 判断是否登录 */
  get login(): boolean {
    if (!this.account) return false;
    if (!this.token) return false;
    if (!this.role) return false;

    return true;
  }

  /** 清理登录信息 */
  public clear() {
    localStorage.removeItem('login-info-account');
    localStorage.removeItem('login-info-name');
    localStorage.removeItem('login-info-role');
    localStorage.removeItem('login-info-icon');
  }

  /** 验证验证计时 */
  public vaild(start?: number): boolean {
    const a: number = parseInt(this.get('login-time') || '0', 10);
    const b: number = start !== undefined ? start : Date.now();

    if ((b - a) > 10 * 60 * 1000) {
      localStorage.removeItem('login-info-account');
      localStorage.removeItem('login-info-role');

      return false;
    } else {
      return true;
    }
  }

  /** 刷新验证计时 */
  public refresh(): boolean {
    if (!this.login) return false;
    
    // 刷新活动时间
    this.set('login-time', Date.now());

    return true;
  }

  private get(key: string): string {
    const temp = localStorage.getItem(key);
    if (temp === '[object Object]') return '';
    if (temp === 'undefined') return '';
    if (temp === 'null') return '';
    if (!temp) return '';

    return temp;
  }

  private set(key: string, val: any) {
    if (val) localStorage.setItem(key, val);
  }
}

